Technical Q&A QA1144
GraphicsImportSetBoundsRect resets your Matrix


Q: é©ï™ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈âÊëúÇâÒì]Ç≥ÇπÇÈÇΩÇflÇ…ÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇégǮǧÇΔǵǃǢNjÇ∑ÅBï`âÊÉåÉNÉ^ÉìÉOÉãÇê›íËÇ∑ÇÈÇΩÇflÇ…ÅAGraphicsImportSetMatrix ÇåƒÇ—èoǵÅAǪÇÃå„ GraphicsImportSetBoundsRect ÇåƒÇ—èoǵǃǢNjÇ∑Ç™ÅAGraphicsImportDraw ÇåƒÇ—èoǵǃLJâÊëúÇ™âÒì]ǵǃǢNjÇπÇÒÅBâΩÇ™ä‘à·Ç¡ÇƒÇ¢ÇÈÇÃÇ≈ǵÇÂǧǩÅH

A: GraphicsImportSetBoundsRect ÇÕÅAâÊëúÇÃå≥ÇÃã´äEÇÅAéwíËÇ≥ÇÍÇΩã´äEÇ…ëŒâûÇ≥ÇπÇÈÇΩÇflÇÃïœä∑çsóÒÇçÏê¨ÇµÇΩå„ÅAǪÇÃçsóÒÇê›íËǵNjÇ∑ÅBDZÇÃÇΩÇflÅAGraphicsImportSetMatrix Ç÷ÇÃç≈èâÇÃåƒÇ—èoǵDžÇÊǡǃê›íËÇ≥ÇÍÇΩçsóÒÇ™ÉäÉZÉbÉgÇ≥ÇÍÇ‹Ç∑ÅBïKóvÇ»ÇÃÇÕÅAGraphicsImportSetMatrix Ç 1 ìxåƒÇ—èoÇ∑DZÇΔÇæÇØÇ≈Ç∑ÅB


ÉäÉXÉg 1 ÇÕÅAéûåvâÒÇËÇ… 90 ìxâÒì]Ç≥ÇπÇÈÉRÅ[ÉhÇé¶ÇµÇ‹Ç∑ÅB

OSErr Rotate90(GraphicsImporterComponent inImporter)
{
    Rect theNaturalBounds;
    MatrixRecord theMatrix;
    OSErr err;

    err = GraphicsImportGetNaturalBounds(inImporter, &theNaturalBounds);
    if (err) goto bail;

    // Åuå¥ì_ÇíÜêSÇ…âÒì]ǵǪÇÃå„ïœä∑Ç∑ÇÈï˚Ç™
    // ǫDZǙâÒì]ÇÃíÜêSÇΔǵǃìKêÿÇ©Çå©Ç¬ÇØèoÇ∑ÇÊÇËLJÇÕÇÈǩDžä»íPÅvÇΔÉuÉãÅ[ÇÕǢǧÅ@
    SetIdentityMatrix(&theMatrix);
    RotateMatrix(&theMatrix, Long2Fix(90), 0, 0);
    TranslateMatrix(&theMatrix, Long2Fix(theNaturalBounds.bottom), 0);

    err = GraphicsImportSetMatrix(inImporter, &theMatrix);

bail:
    return err;
}

ÉäÉXÉg 1 éûåvâÒÇËÇ… 90 ìxÇÃâÒì]



ÉäÉXÉg 2 ÇÕÅAâÒì]Ç…èkè¨ägëÂÇí«â¡Ç∑ÇÈÉRÅ[ÉhÇé¶ÇµÇ‹Ç∑ÅB

OSErr RotateAndScale(GraphicsImporterComponent inImporter)
{
    Rect theNaturalBounds;
    MatrixRecord theMatrix;
    OSErr err;

    err = GraphicsImportGetNaturalBounds(inImporter, &theNaturalBounds);
    if (err) goto bail;

    SetIdentityMatrix(&theMatrix);
    RotateMatrix(&theMatrix, Long2Fix(90), 0, 0);
    TranslateMatrix(&theMatrix, Long2Fix(theNaturalBounds.bottom), 0);

    // 50 % èkè¨
    ScaleMatrix(&theMatrix, fixed1 / 2, fixed1 / 2, 0, 0);

    err = GraphicsImportSetMatrix(inImporter, &theMatrix);

bail:
    return err;
}

ÉäÉXÉg 2Å@éûåvâÒÇËÇ… 90 ìxÇÃâÒì]ÇΔ 50 % ÇÃèkè¨


 


[2002 îN 5 åé 25 ì˙]